package baidu

import (
	"encoding/json"
	"fmt"
	"net/http"
	"net/url"
	"os"
)

const ak = "fX3F0eA9mGN5SIirp72AbHY3Sk7XMuXI"

type Resp struct {
	Status int `json:"status"`
	Result struct {
		Location struct {
			Lat float64 `json:"lat"`
			Lng float64 `json:"lng"`
		} `json:"location"`
	} `json:"result"`
}

// 把中文地址转成 lat,lng
func geocode(address string) (lat, lng float64, err error) {
	params := url.Values{}
	params.Add("address", address)
	params.Add("output", "json")
	params.Add("ak", ak)

	api := "https://api.map.baidu.com/geocoding/v3"
	resp, err := http.Get(api + "?" + params.Encode())
	if err != nil {
		return 0, 0, err
	}
	defer resp.Body.Close()

	var r Resp
	if err = json.NewDecoder(resp.Body).Decode(&r); err != nil {
		return 0, 0, err
	}
	if r.Status != 0 {
		return 0, 0, fmt.Errorf("status=%d", r.Status)
	}
	return r.Result.Location.Lat, r.Result.Location.Lng, nil
}

func main() {
	// 示例：把一家门店写进DB
	lat, lng, err := geocode("安徽省亳州市涡阳县高公镇阿里蛋糕")
	if err != nil {
		fmt.Println("geocode err:", err)
		os.Exit(1)
	}
	fmt.Printf("INSERT INTO store(name,address,latitude,longitude) VALUES('阿丽蛋糕','安徽省亳州市涡阳县高公镇阿丽蛋糕',%.6f,%.6f);\n", lat, lng)
}
